package cn.mothin.frame.util;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

public class ClassUtil {
	/**
	 * 判断类是否实现指定的接口
	 * 
	 * @param src
	 *            被检查的类
	 * @param target
	 *            被检查的接口类
	 * @return
	 */
	public static boolean hasInterface(Class<?> src, Class<?> target) {
		Class<?>[] cs = src.getInterfaces();
		for (Class<?> c : cs) {
			if (c == target) {
				return true;
			} else {
				if (hasInterface(c, target)) {
					return true;
				}
			}
		}
		if (src.getSuperclass() != null) {
			if (hasInterface(src.getSuperclass(), target)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 检查类是否具有指定的注释信息
	 * 
	 * @param src
	 *            被检查的类
	 * @param target
	 *            被检查的注释
	 * @return
	 */
	public static boolean hasAnnotation(Class<?> src,
			Class<? extends Annotation> target) {
		if (src.isAnnotationPresent(target)) {
			return true;
		}
		return false;
	}
	
	public static Object getValue(Object src,String fieldName){
		String names[]=fieldName.split("\\.");
		Object o=src;
		
		for(int i=0;i<names.length;i++){
			if(o==null){
				break;
			}
			
			try {
				Field f = o.getClass().getDeclaredField(names[i]);
				if(!f.isAccessible()){
					f.setAccessible(true);
				}
				if(i==names.length-1){
					return f.get(o);
				}else{
					o=f.get(o);
				}
			} catch (Exception e) {
				break;
			}
		}
		return null;
	}
}
